// 1.导入express框架
const express=require('express')
const path = require('path')
//2.创建express实例
const app=express()
//3. 导入cors
const cors = require('cors')
// 4.全局挂载
app.use(cors())
//-----------------------------------------------------------------------------------
// 7.使用multer
// Multer 是一个 node.js 中间件，用于处理 multipart/form-data 类型的表单数据，它主要用于上传文件。
const multer = require("multer");
// 在server服务端下新建一个public文件，在public文件下新建upload文件用于存放图片
const upload = multer({ dest:'./public/upload' })
//使用
app.use(upload.any())
// 静态托管，就没有public名字  //内置的中间件，直接将一个文件夹作为静态资源
app.use(express.static("./public"));
app.use(express.static(path.join(__dirname, 'dist')));

//-----------------------------------------------------------------------------------
// 5.导入body-parser
var bodyParser = require('body-parser')
// parse application/x-www-form-urlencoded
// 当extended为false时，值为数组或者字符串，当为ture时，值可以为任意类型
//-----------------------------------------------------------------------------------
app.use(
  bodyParser.urlencoded({
    extended: false,
  })
)
// --
app.get('/', function (req, res) {
  res.sendFile(path.join(__dirname + '/dist/index.html'));
});

// parse application/json
app.use(bodyParser.json())
//-----------------------------------------------------------------------------------
// 6.导入jwt配置文件
const jwtconfig = require('./jwt_config/index.js')
//导入jwt
const { expressjwt: jwt } = require('express-jwt')
//使用jwt中间件排除不需要在请求端发送token的接口
// app.use(jwt({
// 	secret:jwtconfig.jwtSecretKey,algorithms:['HS256']  //算法
// }).unless({
// 	path:[/^\/api\//] //注登录不需要携带token
// }))
//-----------------------------------------------------------------------------------
// 处理错误中间件在 router_handle里调用
app.use((req, res, next) => {
  // status=0为成功,=1为失败,默认设为1,方便处理失败的情况
  res.cc = (err, status = 1) => {
    res.send({
      status,
      // 判断这个error是错误对象还是字符串
      message: err instanceof Error ? err.message : err,
    })
  }
  next()
})
//-----------------------------------------------------------------------------------
// 新建错误中间件,对不符合joi验证的账号密码进行报错
app.use((err, req, res, next) => {
  if (err instanceof Joi.ValidationError) {
    res.send({
      status: 1,
      message: '输入的数据不符合验证规则',
    })
  }
})
//-----------------------------------------------------------------------------------
// 绑定和侦听指定的主机和端口
//使用router--------------
//接口1
const loginRouter=require('./router/login.js')
//需要加前缀，本地路径访问加api前缀
app.use('/api',loginRouter)
//接口2
const userRouter = require('./router/userinfo.js')
// 挂载
app.use('/user', userRouter)
//setting3
const setRouter = require('./router/setting.js')
app.use('/set', setRouter)
//product
const productRouter = require('./router/product.js')
app.use('/pro', productRouter)
//log-log
const loginLogRouter = require('./router/login_log.js')
app.use('/llog', loginLogRouter)
//operation_log
const operationLogRouter = require('./router/operation_log.js')
app.use('/olog', operationLogRouter)

app.listen(3007, () => {
	console.log('http://127.0.0.1:3007')
})